﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MJM.SCA.AccesoDatos;
using MJM.SCA.EntidadesNegocio;

namespace MJM.SCA.ComponentesNegocio
{
    public class GraficoCN
    {
        static protected GraficoAD objGraficoAD = new GraficoAD();

        public int ObtieneNumero(List<GraficoEN> lst, string texto)
        {
            for (int i = 0; i < lst.Count; i++)
            {
                if (lst[i].Texto == texto)
                {
                    return lst[i].Cantidad;
                }
            }
            return 0;
        }

        public List<GraficoEN> TotalAccesosWS(string fechaIni,string fechaFin)
        {
            int total = 0;
            List<GraficoEN> lst = objGraficoAD.TotalAccesosWS(fechaIni,fechaFin,1);

            for (int i = 0; i < lst.Count; i++)
            {
                total = lst[i].Cantidad + total;
            }

            for (int i = 0; i < lst.Count; i++)
            {
                lst[i].Porcentaje = ((double)lst[i].Cantidad / (double)total) * 100.0;
                lst[i].Texto2 = lst[i].Porcentaje.ToString().Substring(0,4) + " %"; 
            }
            
            return lst;
        }

        public List<GraficoEN> TotalAccesosWSxMes(int Mes,String Anio)
        {
            int maxd = 0;
            if (Mes == 1 || Mes == 3 || Mes == 5 || Mes == 7 || Mes == 8 || Mes == 10 || Mes == 12)
                maxd = 31;
            else if (Mes == 4 || Mes == 6 || Mes == 9 || Mes == 11)
                maxd = 30;
            else if (DateTime.IsLeapYear(Convert.ToInt32(Anio)) && Mes == 2)
                maxd = 29;
            else
                maxd = 28;
            string smes = Mes.ToString();
            if (smes.Length < 2)
                smes = "0" + smes;
            return TotalAccesosWS(Anio + smes + "01", Anio + smes + maxd.ToString());
        }

        public List<GraficoEN> TotalAccesosFallidosWS(string fechaIni, string fechaFin)
        {
            int total = 0;
            List<GraficoEN> lst = objGraficoAD.TotalAccesosWS(fechaIni, fechaFin, 2);
/*
            for (int i = 0; i < lst.Count; i++)
            {
                total = lst[i].Cantidad + total;
            }

            for (int i = 0; i < lst.Count; i++)
            {
                lst[i].Porcentaje = ((double)lst[i].Cantidad / (double)total)*100.0;
            }
            */
            return lst;
        }

        public List<GraficoEN> TotalAccesosExitososWS(string fechaIni, string fechaFin)
        {
            int total = 0;
            List<GraficoEN> lst = objGraficoAD.TotalAccesosWS(fechaIni, fechaFin, 3);
            /*
            for (int i = 0; i < lst.Count; i++)
            {
                total = lst[i].Cantidad + total;
            }

            for (int i = 0; i < lst.Count; i++)
            {
                lst[i].Porcentaje = ((double)lst[i].Cantidad / (double)total) * 100.0;
            }
            */
            return lst;
        }

        public List<GraficoEN> MostrarDatos(String NombreWS, string fechaIni, string fechaFin)
        {
            List<GraficoEN> Lista = new List<GraficoEN>();
            List<GraficoEN> lst1 = TotalAccesosWS(fechaIni, fechaFin);
            List<GraficoEN> lst2 = TotalAccesosExitososWS(fechaIni, fechaFin);
            List<GraficoEN> lst3 = TotalAccesosFallidosWS(fechaIni, fechaFin);
            GraficoEN objGrafico;
            for (int i = 0; i < 3; i++)
            {
                objGrafico = new GraficoEN();
                switch (i)
                {
                    case 0: 
                        {
                            objGrafico.Texto = "Accesos";
                            objGrafico.Cantidad = ObtieneNumero(lst1, NombreWS);
                        }; break;
                    case 1:
                        {
                            objGrafico.Texto = "Satisfactorios";
                            objGrafico.Cantidad = ObtieneNumero(lst2, NombreWS);
                        }; break;
                    case 2:
                        {
                            objGrafico.Texto = "Fallidos";
                            objGrafico.Cantidad = ObtieneNumero(lst3, NombreWS);
                        }; break;
                }
                Lista.Add(objGrafico);
            }

            return Lista;
        }

        public List<GraficoEN> ListarWS()
        {
            return objGraficoAD.TotalWS();
        }

        public List<GraficoEN> GetDatosSolicitudes(string FechaIni,string FechaFin)
        {
            List<GraficoEN> lst = new List<GraficoEN>();
            List<GraficoEN> aux;
            GraficoEN dato1 = new GraficoEN();
            dato1.Texto="Total de accesos: ";
            dato1.Cantidad=0;
            aux = TotalAccesosWS(FechaIni, FechaFin);
            for (int i = 0; i < aux.Count; i++)            
                dato1.Cantidad = aux[i].Cantidad + dato1.Cantidad;
            lst.Add(dato1);

            GraficoEN dato2 = new GraficoEN();
            dato2.Texto = "Total de aciertos: ";
            dato2.Cantidad = 0;
            aux = TotalAccesosExitososWS(FechaIni, FechaFin);
            for (int i = 0; i < aux.Count; i++)
                dato2.Cantidad = aux[i].Cantidad + dato2.Cantidad;
            dato2.Porcentaje = 100 * ((double)dato2.Cantidad/(double)dato1.Cantidad);
            lst.Add(dato2);

            GraficoEN dato3 = new GraficoEN();
            dato3.Texto = "Total de fallas: ";
            dato3.Cantidad = 0;
            aux = TotalAccesosFallidosWS(FechaIni, FechaFin);
            for (int i = 0; i < aux.Count; i++)
                dato3.Cantidad = aux[i].Cantidad + dato3.Cantidad;
            dato3.Porcentaje = 100 * ((double)dato3.Cantidad / (double)dato1.Cantidad);
            lst.Add(dato3);
            return lst;
        }

        public List<GraficoEN> TotalAccesosDiarioWS(String Anio,int Mes,String WS)
        {
            return objGraficoAD.TotalDiarioWS(Anio, Mes,WS);
        }

        public List<GraficoEN> ListarWSddl()
        {
            List<GraficoEN> lst = objGraficoAD.TotalWS();
            GraficoEN obj = new GraficoEN();
            obj.Texto = "Todos";
            lst.Insert(0, obj);
            return lst;
        }

        public List<GraficoEN> TotalMetxMes(String Anio, int Mes, String WebService)
        {
            int total = 0;
            List<GraficoEN> lst = objGraficoAD.TotalMetxMes(Anio, Mes, WebService);
            for (int i = 0; i < lst.Count; i++)
            {
                total = lst[i].Cantidad + total;
            }

            for (int i = 0; i < lst.Count; i++)
            {
                lst[i].Porcentaje = ((double)lst[i].Cantidad / (double)total) * 100.0;
                if (lst[i].Porcentaje.ToString().Length>5)
                    lst[i].Texto2 = lst[i].Porcentaje.ToString().Substring(0, 4) + " %";
                else
                    lst[i].Texto2 = lst[i].Porcentaje.ToString() + " %";
            }

            return lst;            
        }

        public List<GraficoEN> TotalAccesosDiarioMet(String Anio, int Mes, String WS)
        {
            return objGraficoAD.TotalMetDiario(Anio, Mes, WS);
        }

        public List<GraficoEN> TotalAplxMes(String Anio, int Mes)
        {
            return objGraficoAD.TotalAplxMes(Anio, Mes);
        }

        public List<GraficoEN> TotalAccesosDiarioApl(String Anio, int Mes, String AW)
        {
            return objGraficoAD.TotalAplDiario(Anio, Mes, AW);
        }

        public List<GraficoEN> ListarDelitos()
        {
            return objGraficoAD.ListarDelitos();
        }

        public List<GraficoEN> ListarTipoDeli()
        {
            return objGraficoAD.ListarTipoDeli();
        }

        public List<GraficoEN> GraficoDelito(int Tipo, String Anio,int Zona)
        {
            return objGraficoAD.GraficoDelito(Tipo, Anio, Zona);        }

        public List<GraficoEN> DelitosxTipo(String tipo)
        {
            if (tipo != "")
            {
                List<GraficoEN> lst = ListarDelitos();
                List<GraficoEN> aux = new List<GraficoEN>();
                for (int i = 0; i < lst.Count; i++)
                {
                    if (lst[i].Texto2 == tipo)
                        aux.Add(lst[i]);
                }

                return aux;
            }

            return ListarDelitos();
        }

        public List<GraficoEN> ListarCantidadIncidencia(String FechaInicio, String FechaFin)
        {
            return objGraficoAD.ListarCantidadIncidencia(FechaInicio, FechaFin);
        }

        public List<GraficoEN> ListaZonas()
        {
            List<GraficoEN> lstaux = objGraficoAD.ListarZonas();
            GraficoEN obj = new GraficoEN();
            obj.Texto = "0";
            obj.Texto2 = "Seleccione sector";
            lstaux.Insert(0,obj);
            return lstaux;
        }
    }
}
